/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cz.muni.fi.diplomka.datalayer.dao;

import cz.muni.fi.diplomka.datalayer.entity.CityEntity;
import cz.fi.muni.diplomka.common.Coordinates;
import java.util.List;

/**
 * Interface for manipulation with City Entity
 *
 * @author Jakub Kutil
 */
public interface CityDao {

    /**
     * Adds City to DB
     *
     * @param cityEntity City to add
     */
    public void addCity(CityEntity cityEntity);

    /**
     * Edits City in DB
     *
     * @param cityEntity City to edit
     */
    public void editCity(CityEntity cityEntity);

    /**
     * Gets City at specified location
     *
     * @param coordinates coordinates to look at
     *
     * @return found City or empty one if not found
     */
    public CityEntity getCityAtPosition(Coordinates coordinates);

    /**
     * Gets City with specified ID
     *
     * @param id ID to search
     *
     * @return found City or empty one if not found
     */
    public CityEntity getCityById(Long id);

    /**
     * Gets City with specified name
     *
     * @param name name to search
     *
     * @return found City or empty one if not found
     */
    public CityEntity getCityByName(String name);

    /**
     * Gets all Cities of Player
     *
     * @param playerId ID of Player
     *
     * @return List of all Cities belonging to Player
     */
    public List<CityEntity> getCitiesOfPlayer(Long playerId);

    /**
     * Gets all Cities in game world
     *
     * @return List of all Cities
     */
    public List<CityEntity> getAllCities();
}
